package model.siec.definicja;

import model.CLiczba;


public class CFunkacjaAktywacjaSigmoidalna implements IFunkcjaAktywacja {

	private CLiczba beta;
	
	public CFunkacjaAktywacjaSigmoidalna(CLiczba beta) {
		this.beta = beta;
	}

	/*
	 * (non-Javadoc)
	 * @see model.siec.IFunkcjaAktywacja#getFunkcjaWartosc(model.CLiczba)
	 */
	public CLiczba getFunkcjaWartosc(CLiczba argument) {
		double wynikPotegi = Math.pow(Math.E, -(argument.multiply(beta)).doubleValue());
		
		CLiczba mianownik = CLiczba.JEDEN.add(new CLiczba(wynikPotegi));
		CLiczba wynik = CLiczba.JEDEN;
			
		wynik = wynik.divide(mianownik);
		return wynik;
	}

	/*
	 * (non-Javadoc)
	 * @see model.siec.IFunkcjaAktywacja#getFunkcjaPochodnaWartosc(model.CLiczba)
	 */
	public CLiczba getFunkcjaPochodnaWartosc(CLiczba argument) {
		CLiczba wartoscFunkcji = getFunkcjaWartosc(argument);
		return beta.multiply(wartoscFunkcji.multiply(CLiczba.JEDEN.subtract(wartoscFunkcji)));
	}

}
